from django.shortcuts import render

from django.http import HttpResponse,JsonResponse

from .. models import Types,Goods
# Create your views here.

def GetTypesAll(request):
    # 获取当前所有的类 obs = Types.objects.all()

    # 模型提供 extra 可实现以下sql语句功能，但是不允许直接使用sql语句，防止sql注入攻击
    # select *,concat(path,id) as paths from madmin_types order by paths;
    obs = Types.objects.extra(select = {'paths':'concat(path,id)'}).order_by('paths')

    # 判断是否由搜索条件
    if request.GET.get('type',None):
        obs = obs.filter(name__contains = request.GET['keywords'])

    # 循环处理父类名，添加缩进效果，使列表看上去更简洁明了,上述代码已经排序过。
    for x in obs:
        if x.pid != 0:
            # 可以在这里判断路径path中的‘，’符号个数   n*'  |----'  
            pob = Types.objects.get(id = x.pid)
            x.pname = pob.name

    return obs


def index(request):

    # 获取数据
    obs = GetTypesAll(request)

    # 数据分页
    pageindex = request.GET.get('p',1)
    # 导入分类页
    from django.core.paginator import Paginator
    # 实例化分页对象
    p = Paginator(obs,10)

    # 获取当前页的数据
    userlist = p.page(pageindex)

    context = {'typelist':userlist}
    # 加载模板
    return render(request,'myadmin/types/index.html',context)

 
def add(request):
    
    # 分配数据，将所有的分类显示在页面上
    context = {'typelist':GetTypesAll(request)}
    # 加载模板
    return render(request,'myadmin/types/add.html',context)


def insert(request):

    data = request.POST.dict()
    del data['csrfmiddlewaretoken']

    # 判断当前添加的分类是否为顶级分类，因为顶级分类的pid->0 是认为添加的，id中没有0
    if data['pid'] == '0':
        # 顶级分类
        data['path'] = '0,'
    else:
        # 非顶级分类，可以用程序批量匹配，先获取父级的id
        ob = Types.objects.get(id=data['pid'])
        data['path'] = ob.path + data['pid']+ ','

    # 执行添加
    addob = Types.objects.create(**data)
    if addob:      
        return HttpResponse('<script>alert("分类添加成功");location.href="/myadmin/types/index/"</script>')
    else:
        return HttpResponse('<script>alert("分类添加失败");history.back(-1)</script>')


def delete(request):
    tid = request.GET['id']
    print(tid)

    # 统计当前类下是否有子类
    num = Types.objects.filter(pid=tid).count()
    if num:
        return JsonResponse({'code':1, 'msg':'当前类下还有子类，不能删除'})

    # 判断当前类下是否还有商品，商品和types已用外键关联
    # num1 = Goods.objects.filter(tid=tid).count()
    # if num1:
    #     return JsonResponse({'code':2,'msg':'当前类下还有商品,不能删除'})

    # 删除不造成其他影响，可以执行删除
    dob = Types.objects.get(id=tid)
    res = dob.delete()

    # if res:
    return JsonResponse({'code':0,'msg':'删除成功'})
    # else:
    #     return JsonResponse({'code':3, 'msg':'删除失败'})


def update(request):
    # try:
        # 获取 当前id 和当前创建的新的分类名 {name:newname}
    tid = request.GET.get('id')
    print(tid)
    name = request.GET.get('name')
    print(name)
    # 执行修改
    ob = Types.objects.get(id =tid)
    ob.name = name
    ob.save()

    return JsonResponse({'code':0,'msg':'修改成功'})
    # except:
    #     return JsonResponse({'code':1,'msg':'修改失败'})

    


